/**
6.条件如下：
1)一群人围在一起坐成环状（如：N个人，人员编号从1~N）；
2)从某个编号开始报数（如：从第K个人开始报数）；
3)数到某个数（如：从第K个人开始数M个数，第M个人出列）的时候，此人出列，下一个人重新报数；
4)一直循环，直到所有人出列  ，结束。

在上述条件下，编码在控制台顺序打印出列人员。
 */
/**
 * 
 * @param {*} n 人数
 * @param {*} k 编号
 * @param {*} m 第几个出局
 */
function main(n, k, m) {
   //生成一个编号并存放到数组中；
   var arr = getArr(n);
   //开始出局的函数
   recursion(arr, n, k - 1, m);
}
//规律：
function getArr(n) {
   let arr = []
   for (let i = 1; i <= n; i++) {
      arr.push(i);
   }
   return arr;
}
//出局一个人;
//
function recursion(arr = [], n, i, m) {
   //计算m对n取余；（）
   var indexFlag = m % n;//当没有余数的时候，
   //特殊情况要修正；
   var index = i + indexFlag-1;  //index 是编号  k也是编号
   if (index > n - 1) {
      index -= n;
   }
   if (index < 0) {
      index += n;
   }
   //var index = k + indexFlag - 1 > n ? k + indexFlag - n - 1 : k + indexFlag - 1;
   // if(index<0){
   //    index+=n;
   // }
   // index = index < 0 ? n + index : index;  
   console.log(arr[index]);
   arr.splice(index, 1);
   if (n > 1) {
      recursion(arr, n - 1, index, m);
   }
}
main(5, 2, 2)

